<?php
/**
 * Acciones del admin de banners
 * @author Maverick Hunter
 */

// Requerimientos
require '../../config.php';
require '../../classes/BannersEngine.php';

$json_response = array(
  'data'    => null,
  'message' => '',
  'error'   => false
);

/**
 * Verifica que un input file de imagen contenga datos validos.
 * devuelve TRUE si todo va bien, de lo contrario FALSE.
 */
function check_image_file($input_name)
{
  if($_FILES[$input_name]['error'] != UPLOAD_ERR_OK ){
    return false;
  } elseif( preg_match('/\.jpg$/', $_FILES[$input_name]['name']) === false ) {
    return false;
  }
  return true;
}

/**
 * Mueve los archivos de imagn enviados al directorio de banners y lo renombra
 * con el ID del banner y el prefijo de lenguaje $lang
 */
function move_image_file($input_name, $banner_id, $lang)
{
  $image_file = '../../' . BannersEngine::BANNERS_PATH . $banner_id . '-'
    . $lang . '.jpg';

  if( !move_uploaded_file($_FILES[$input_name]['tmp_name'], $image_file) ) {
    return false;
  } else {
    chmod($image_file, 0777);
    return true;
  }
}

switch(isset($_POST['action']) ? $_POST['action'] : (isset($_GET['action']) ? $_GET['action'] : null)){

  case 'delete':
    /*
     * Eliminar un banner
     */

    // Borrar el registro de la tabla
    $query_res = mysql_query('DELETE FROM `banner` WHERE `id`='
      . (int)$_POST['banner_id']);

    if(!$query_res){
      $json_response['error']   = true;
      $json_response['message'] = 'No se pudo borrar el banner.';
    } else {
      // Borrar los archivos del banner
      @unlink(PATH . BannersEngine::BANNERS_PATH
        . $_POST['banner_id'] . '-es.jpg');
      @unlink(PATH . BannersEngine::BANNERS_PATH
        . $_POST['banner_id'] . '-en.jpg');
    }

    break;

  case 'order':
    /*
     * Ordenar los banners
     */
    foreach($_POST['row_banner'] as $position => $id){
      if( !mysql_query("UPDATE `banner` SET `orden`=$position WHERE `id`=$id") ){
        $json_response['error']   = true;
        $json_response['message'] = 'No se pudo actualizar el orden.';
        break;
      }
    }
    break;

  case 'preview':
    /*
     * Genera un preview del banner para no cargar las imagenes grandes en la GUI
     */
    $image_file = '../../' . BannersEngine::BANNERS_PATH . $_GET['banner_id']
      . '.jpg';

    if( !is_file($image_file) ){
      // Falta la imagen, mandamos la imagen de "no disponible"
      header('Location: ../images/no-banner-preview.jpg');
    } else {
      require '../../classes/QuarkImage.php';
      $Image = new QuarkImage();
      $Image->resize($image_file, null, 400, 128);
    }

    // Evitar el envio de la respuesta JSON
    exit();
    break;

  case 'save':
    /*
     * Guardar datos del banner, reutilizamos $json_response para generar
     * el resultado del upload
     */
    $_POST['banner_name'] = trim($_POST['banner_name']);
    $_POST['banner_url']  = trim($_POST['banner_url']);

    // Revisar los archivos de imagen
    if( !check_image_file('banner_file_es') ) {

      // Imagen en español invalida
      $json_response['error']   = true;
      $json_response['data']    = 'es';
      $json_response['message'] = 'La imagen para banner en español es inválida.';

    } elseif( !check_image_file('banner_file_en') ) {

      // Imagen en ingles invalida
      $json_response['error']   = true;
      $json_response['data']    = 'en';
      $json_response['message'] = 'La imagen para banner en ingles es inválida.';

    } elseif($_POST['banner_name'] == '') {

      // Falta nombre
      $json_response['error']   = true;
      $json_response['message'] = 'Falta el nombre del banner';

    } else {

      // Escapar los datos por que el puto del Joan le tiene miedo a PDO
      $name = mysql_real_escape_string($_POST['banner_name']);
      $url  = mysql_real_escape_string($_POST['banner_url']);
      
      if($_POST['banner_id'] == 0){
        /*
         * Insertar nuevo banner
         */
        $sql = "INSERT INTO `banner`(`nombre`,`url`,`segundos`,`orden`) VALUES('"
          . $name . "','" . $url . "'," . $_POST['banner_seconds'] . ", 0);";

      } else {
        /*
         * Actualizar datos del banner
         */
        $sql = "UPDATE `banner` SET `nombre`='" . $name . "', `url`='"
          . $url ."', `segundos`=" . $_POST['banner_seconds'] . " WHERE `id`="
          . $_POST['banner_id'];
      }

      if( !mysql_query($sql) ){
        $json_response['error'] = true;
        $json_response['message'] = 'No se pudieron guardar los datos';
      } else {

        // Obtener el ID del banner para renombrar las imagenes
        if($_POST['banner_id'] == 0){
          $_POST['banner_id'] = mysql_insert_id();
        }

        // Mover imagenes al directorio de banners
        if( !move_image_file('banner_file_es', $_POST['banner_id'], 'es')
          || !move_image_file('banner_file_en', $_POST['banner_id'], 'en') ){
          $json_response['error']   = true;
          $json_response['message'] = 'No se pudieron copiar las imágenes';
        } else {
          // Devolver el ID y nombre en el data, para que se puedan cargar los previews
          // en el cliente
          $json_response['data']    = $_POST;
          $json_response['message'] = 'Banners guardados';
        }
      }
      /* END: if !mysql_query() */
    }
    /* END: Validación de datos */

    ?>
    <script type="text/javascript">
    var UploadResult = <?php echo json_encode($json_response) ?>;
    </script>
    <?php
    
    // Evitar el envio de la respuesta JSON
    exit();
    break;

    case 'load_row':
      $query_res = mysql_query('SELECT * FROM `banner` WHERE `id`='
        . $_POST['banner_id']);
      $banner = mysql_fetch_assoc($query_res);
      require 'banner_row.php';

      // Evitar el envio de la respuesta JSON
      exit();
    break;

}

header('content-type:application/json;charset=utf-8');
echo json_encode($json_response);
